#ifndef LinkCommon_h
#define LinkCommon_h

#include "LinkContext.h"


typedef void (*LinkWriteDataFn)(int cmdCode, void *buffer, int length, bool isResponse);
typedef void (*LinkReadDataResultFn)(LinkContextRef context, int cmdCode, int errCode);
typedef void (*LinkVerifyResultFn)(LinkContextRef context, bool result, bool isBusy);
typedef void (*LinkGimbalEventFn)(LinkContextRef context, int eventId);
typedef void (*LinkCalibrateResultFn)(LinkContextRef context, int state);// 云台校准的回调函数
typedef void (*LinkResetFactoryResultFn)(LinkContextRef context, int code); // 恢复出厂设置回调函数


// 产品型号
enum class HHLinkProductType {
    UNKNOWN = 0,
    X = 0x1000, XE, X2, X3, X3SE,
    V2 = 0x2000, V2S, V3, V3PRO,
    Q = 0x3000, Q2,
    M5 = 0x4000, M5S, M6, M6SE, M7,
    MT2 = 0x5000, MT3,
    HR4 = 0x6000, HR5, G3M
};

// 产品系列(产品型号归类,不同系列在部分功能处理上会有差异)
enum class HHLinkProductSeries {
    UNKNOWN = 0,
    X, //X系列
    V, //V系列
    M, //M系列
    MT, //MT系列
    Q, //单轴系列
    REMOTE, //遥控器系列
};

/// 产品使用的蓝牙芯片型号
enum class HHLinkProductBleSeries {
    UNKNOWN = 0,
    TL = 0x01,//泰凌
    JL = 0x02,//杰理
};

enum class HHLinkEvent: int {
    UNKNOWN = 0,
    SHUTTER = 1, // 快门(单击)
    CAMERA_MODE_SWITCH, // 相机模式切换(双击)
    PUSH_ROD_UP, // 推杆上推
    PUSH_ROD_DOWN, // 推杆下拉
    PUSH_ROD_STOP, // 推杆归中
    CAMERA_FRONT_REAR_SWITCH, // 相机前后置切换(三击)
    ROCKER_PUSH, // 摇杆开始推动
    ROCKER_STOP, // 摇杆停止推动
    SCREEN_SWITCH, // 横竖屏切换
    CENTER, // 归中
    CALIBRATION, // 校准
    INCEPTION, // 盗梦空间
    FOCUS_CENTER, // 中心对焦
    WHEEL_PRESS, // 滚轮按下
    WHEEL_CLOCKWISE, // 滚轮顺时针旋转
    WHEEL_ANTICLOCKWISE, // 滚轮逆时针旋转
    WHEEL_STOP, // 滚轮停止
    LONG_PRESS_LOCK, // 长按锁定
    LONG_PRESS_UNLOCK, // 退出长按锁定
    FLIP_180, // 翻转180°
};

enum class HHLinkOrientation {
    UNKNOWN = 0,
    PORTRAIT = 1,
    PORTRAIT_UPSIDE_DOWN,
    LANDSCAPE_LEFT,
    LANDSCAPE_RIGHT
};


enum class AngleControlResult: char {
    RESULT_UNKNOWN = 0x01,
    RESULT_UNARRIVE, // 无法到达指定位置
    RESULT_OK_PAN, // 航向到达指定位置
    RESULT_OK_TILT, // 俯仰到达指定位置
    RESULT_OK_PAN_TILT // 航向和俯仰到达指定位置
};

// typedef char LinkContextTemplateFlag;
// const LinkContextTemplateFlag TemplateFlag_DEFAULT = 0X00;
// const LinkContextTemplateFlag TemplateFlag_PANORAMA = 0X01;
// const LinkContextTemplateFlag TemplateFlag_MOMENT = 0X02;
// const LinkContextTemplateFlag TemplateFlag_TIMELAPSE = 0X03;
// const LinkContextTemplateFlag TemplateFlag_ATTRIBUTE = 0X04;
// const LinkContextTemplateFlag TemplateFlag_FACTORYRESET = 0X05;



enum class LinkCmdCode: int {
    BLE_FIRMWARE_VER = 0xFECB, // ble固件版本
    GIMBAL_FIRMWARE_VER = 0xFFCA, // 稳定器固件版本
    CENTERING_RESULT = 0xFF67, // 归中
    GIMBAL_RUNNING_STATUS = 0xFFB6, // 充电状态、运行状态、电量
    ANGLE_CTRL = 0xFF93, // 角度控制
    GIMBAL_INFO = 0xFFAC, // 云台,机型,订单号
    GIMBAL_INFO_2 = 0xFFAB, // 日期,流水号
    GIMBAL_INFO_3 = 0xFFA8, // 摇杆控制，跟随速度，电机力度，激活标志位,智能横滚,工作模式
    GIMBAL_INFO_4 = 0xFFA9,
    TIMELAPSE_SET_POINT_RESULT = 0xFE6E, // 延时摄影-设置取景点结果
    TIMELAPSE_DEL_POINT_SUCCESS = 0x9B6E, // 延时摄影-删除取景点成功
    TIMELAPSE_PREVIEW_POINT = 0x9D6E, // 延时摄影-预览到取景点
    TIMELAPSE_ENTER = 0x9C6E, // 延时摄影-进入延时摄影模式
    TIMELAPSE_MOVE_START_POINT = 0x9A6E, // 延时摄影-转动到起始点
    TIMELAPSE_END = 0x996E, // 延时摄影-结束移动延时
    TIMELAPSE_START = 0x986E, // 延时摄影-开始移动延时
    TIMELAPSE_ARRIVE_POINT = 0x966E, // 延时摄影-运行到达取景点
    GIMBAL_ACCELEROMETER_OFFSET = 0xFE65, // 加速度计偏差值
    GIMBAL_ENCODER_OFFSET = 0xFC65, // 编码器偏差值, 航向/俯仰/横滚轴微调值
    GIMBAL_TONE = 0xF665, // 稳定器提示音
    GIMBAL_PREFERENCES = 0xF565, // 稳定器偏好设置&开机屏幕方向
    GIMBAL_AB = 0xFF2D, // A/B点设置
    INCEPTION_RUNNING_STATUS = 0xFE3E, // 盗梦空间运行状态
    INCEPTION_TIME_SPEED = 0xFC3E, // 盗梦空间速度时长
    GIMBAL_CALIBRATE_RESULT = 0xFFBB, // 云台校准
    GIMBAL_FACTORY_RESET_AI = 0xFFE3, // AI恢复出厂设置
};

// 云台工作模式
enum class LINK_GIMBAL_WORK_MODE {
    PAN = 0, // 航向跟随
    PAN_TILT, // 航向&俯仰跟随
    ALL_LOCK, // 全锁定
    POV, // POV全跟随
    DIY, // 自定义
};

// 云台自定义工作模式
enum class LINK_GIMBAL_WORK_MODE_CUSTOM {
    UNKOWN = 0,
    PAN = 1,
    TILT = 1 << 1,
    ROLL = 1 << 2,
};

// 稳拍风格模式&跟随速度模式
enum class LINK_GIMBAL_FOLLOW_SPEED {
    UNKOWN = -1,
    SLOW = 0, MEDIUM, FAST, HIGH
};

// 电机力度&电机响应模式
enum class LINK_GIMBAL_MOTOR_FORCE {
    UNKOWN = -1,
    LOW = 0, MEDIUM, HIGH
};

#endif /* LinkCommon_h */
